#ifndef VECTOR_H_INCLUDED
#define VECTOR_H_INCLUDED

#include <iostream>

class Vector {
    friend std::ostream & operator<<( std::ostream &, const Vector & );
public:
    Vector( void );
    Vector( float, float, float, float );
    Vector( float * );
    float at( unsigned int ) const;
    Vector & normalize( void );
    float & operator[]( unsigned int );
    Vector & operator+=( const Vector & );
    Vector & operator-=( const Vector & );
    Vector & operator*=( float );
    Vector & operator/=( float );
    Vector operator*( float ) const;
    Vector operator/( float ) const;
    Vector operator+( const Vector & ) const;
    Vector operator-( const Vector & ) const;
    Vector operator-( void ) const;
    bool operator==( const Vector & ) const;
    bool equals( const Vector &, float ) const;
    static float dotProduct( const Vector &, const Vector & );
    static Vector normalize( const Vector & );
private:
    float data[4];
};

#endif // VECTOR_H_INCLUDED
